
3 Datos Vectoriales
Manejo y Representación de datos vectoriales
3.1 Introducción
Los datos vectoriales son uno de los tipos fundamentales en los que se representa la información espacial. Este formato se caracteriza por describir los elementos del espacio a través de puntos, líneas y polígonos. Cada uno de estos objetos puede tener atributos asociados que describen características adicionales como el uso del suelo, la densidad poblacional, o cualquier otra variable relevante para el análisis.
En políticas públicas, los datos vectoriales juegan un rol clave en la toma de decisiones, ya que permiten analizar la distribución espacial de fenómenos, desde la localización de infraestructuras hasta la incidencia de eventos sociales y delictivos. A través de las herramientas de análisis vectorial, es posible identificar patrones, relaciones espaciales y tomar decisiones fundamentadas sobre la planificación y gestión del territorio.
En este capítulo, utilizaremos la librería sf para la lectura y manipulación de datos vectoriales en R. Esta librería es ampliamente utilizada en la comunidad de análisis espacial debido a su eficiencia y su integración con otras herramientas como dplyr para el manejo de tablas de atributos.

Tipos de Datos Vectoriales espaciales básicos
| type | description |
|---|---|
| POINT | zero-dimensional geometry containing a single point |
| LINESTRING | sequence of points connected by straight, non-self intersecting line pieces; one-dimensional geometry |
| POLYGON | geometry with a positive area (two-dimensional); sequence of points form a closed, non-self intersecting ring; the first ring denotes the exterior ring, zero or more subsequent rings denote holes in this exterior ring |
| MULTIPOINT | set of points; a MULTIPOINT is simple if no two Points in the MULTIPOINT are equal |
| MULTILINESTRING | set of linestrings |
| MULTIPOLYGON | set of polygons |
| GEOMETRYCOLLECTION | set of geometries of any type except GEOMETRYCOLLECTION |
Objetivos del Módulo
- Manipulación de Datos Vectoriales
- Operaciones Espaciales
- Ejemplo de Delitos
3.2 Manipulación de Datos Vectoriales
Además de las geometrías espaciales, los datos vectoriales incluyen una tabla de atributos que contiene información adicional sobre cada objeto espacial. Esta tabla de atributos es esencial para realizar análisis más profundos, ya que nos permite filtrar, seleccionar, crear columnas nuevas y resumir los datos según diferentes criterios.
Para la manipulación de datos vectoriales se usará la sección de atributos que la estructura sf permite para lo cual utilizaremos la librería dplyr cómo si fuera un dataframe.
3.2.1 Lectura de Insumos

El paquete sf facilita la importación de estos datos, que suelen estar en formatos como shapefile (.shp) o GeoJSON (.geojson), etc. la función nativa para esto es st_read(). Para los efectos prácticos de esta etapa se utilizará la base de datos del censo a nivel zonal a nivel nacional que en este caso esta almacenado bajo la estrucura rds nativa de R, pero manteniendo todos los atributos y geometrías espaciales.
Cargar librerías
# install.packages("sf")
library(sf) # manipulación de datos vectoriales
library(dplyr) # manipulación de tablas de atributos
library(mapview) # visualización de mapas dinámicos
library(ggplot2) # gráficos
library(RColorBrewer) #paleta de colores
library(viridis) #paleta de colores# sii_LC <- st_read("data/sii/sii_urbe_LC.shp")
zonas_censales <- readRDS("data/censo/zonas_urb_consolidadas.rds")| REGION | NOM_REGION | PROVINCIA | NOM_PROVIN | COMUNA | NOM_COMUNA | URBANO | DISTRITO | LOC_ZON | GEOCODIGO | AREA | COD_INE_15 | COD_INE_16 | VALIDO | KM2 | ESC_JH | PERS | M2_O | M2_C | DENS_HAB | DENS_OF | DENS_COM | geometry |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | REGIÓN DE TARAPACÁ | 14 | TAMARUGAL | 1405 | PICA | PICA | 1 | 1 | 1405011001 | 9336400.3 | 1405011001 | 1405011001 | TRUE | 9.3364003 | 10.817377 | 3876 | 0.0000 | 0.0000 | 415.1493 | 0.0000 | 0.00000 | MULTIPOLYGON (((-69.31192 -... |
| 1 | REGIÓN DE TARAPACÁ | 14 | TAMARUGAL | 1401 | POZO ALMONTE | POZO ALMONTE | 1 | 1 | 1401011001 | 1941994.2 | 1401011001 | 1401011001 | TRUE | 1.9419942 | 10.224880 | 2771 | 1476.0000 | 4093.0000 | 1426.8838 | 760.0435 | 2107.62731 | MULTIPOLYGON (((-69.78591 -... |
| 1 | REGIÓN DE TARAPACÁ | 14 | TAMARUGAL | 1401 | POZO ALMONTE | POZO ALMONTE | 1 | 2 | 1401011002 | 3572254.9 | 1401011002 | 1401011002 | TRUE | 3.5722549 | 10.253158 | 6506 | 1905.0000 | 9696.0000 | 1821.2586 | 533.2766 | 2714.25201 | MULTIPOLYGON (((-69.76215 -... |
| 1 | REGIÓN DE TARAPACÁ | 14 | TAMARUGAL | 1404 | HUARA | HUARA | 1 | 1 | 1404011001 | 603314.2 | 1404011001 | 1404011001 | TRUE | 0.6033142 | 9.523220 | 1082 | 0.0000 | 0.0000 | 1793.4270 | 0.0000 | 0.00000 | MULTIPOLYGON (((-69.7696 -1... |
| 1 | REGIÓN DE TARAPACÁ | 11 | IQUIQUE | 1107 | ALTO HOSPICIO | ALTO HOSPICIO | 1 | 2 | 1107011002 | 2272129.2 | 1107011002 | 1107011002 | TRUE | 2.2721292 | 9.747321 | 4360 | 475.0686 | 180.6789 | 1918.9050 | 209.0852 | 79.51965 | MULTIPOLYGON (((-70.09246 -... |
| 1 | REGIÓN DE TARAPACÁ | 11 | IQUIQUE | 1107 | ALTO HOSPICIO | ALTO HOSPICIO | 3 | 2 | 1107031002 | 5820325.8 | 1107031002 | 1107031002 | TRUE | 5.8203258 | 9.397516 | 7099 | 4003.6214 | 1008.7833 | 1219.6912 | 687.8690 | 173.32076 | MULTIPOLYGON (((-70.05305 -... |
3.2.2 Filtros y selección de columnas
Uno de los pasos más comunes en la manipulación de datos vectoriales es filtrar y seleccionar filas o columnas de la tabla de atributos, lo que permite centrarse en elementos específicos para análisis más detallados. Para efectos de practicar la manipulación de datos espaciales se creará un subset de la base de zonas censales de alguna provincia de Chile y se realizarán cálculos sencillos de densidad.
Filtrar
| Operador | Comparación | Ejemplo | Resultado |
|---|---|---|---|
| x | y | x Ó y es verdadero | TRUE | FALSE | TRUE |
| x & y | x Y y son verdaderos | TRUE & FALSE | FALSE |
| !x | x no es verdadero (negación) | !TRUE | FALSE |
| isTRUE(x) | x es verdadero (afirmación) | isTRUE(TRUE) | TRUE |
# zonas_censales$NOM_PROVIN %>% unique() %>% sort()
zonas <- zonas_censales %>%
filter(NOM_PROVIN == "VALPARAÍSO") %>%
filter(URBANO %in% c("VIÑA DEL MAR", "VALPARAÍSO") )
# mapview::mapview(zonas, zcol = "PERS")ggplot() +
geom_sf(data = zonas, aes(fill = PERS), color =NA,
alpha=0.8, size= 0.1)+
scale_fill_distiller(palette= "YlGnBu", direction = 1)+
ggtitle("Población Zonas Censales - Urbano" ) +
theme_bw() +
theme(panel.grid.major = element_line(colour = "gray80"),
panel.grid.minor = element_line(colour = "gray80"))
Selección de columnas
zonas <- zonas %>%
dplyr::select(GEOCODIGO,NOM_REGION, NOM_PROVIN,
NOM_COMUNA, PERS, URBANO, ESC_JH)Mutate
Cálculo de superficie por polígono
zonas <- zonas %>%
mutate(AREA = as.numeric(st_area(.))) %>% # en metros cuadrados
mutate(AREA = AREA/10000) %>% # en hectárea cuadrada
mutate(DENS_PERS= round(PERS/AREA, 1))
# zonasggplot() +
geom_sf(data = zonas, aes(fill = PERS), color =NA,
alpha=0.8, size= 0.1)+
scale_fill_distiller(palette= "YlGnBu", direction = 1)+
ggtitle("Población Zonas Censales - Urbano" ) +
theme_bw() +
theme(panel.grid.major = element_line(colour = "gray80"),
panel.grid.minor = element_line(colour = "gray80"))
ggplot() +
geom_sf(data = zonas, aes(fill = DENS_PERS), color =NA,
alpha=0.8, size= 0.1)+
scale_fill_distiller(palette= "YlGnBu", direction = 1)+
ggtitle("Densidad de Población Zonas Censales - Urbano" ) +
theme_bw() +
theme(panel.grid.major = element_line(colour = "gray80"),
panel.grid.minor = element_line(colour = "gray80"))

3.2.3 Resumen Estadísticos
El objetivo de este punto es que con bases de datos espaciales también se pueden hacer resúmenes estadísticos, como se hacen normalmente con bases de datos. Ahora, se creará tabla con las poblaciones y promedio de años de estudio del Jefe de Hogar en todas las comunas de Chile.
Un punto importante para generar esta tabla es eficiente eliminar la geometría para los cálculos ya que la salida será una tabla.
tab_com <- zonas_censales %>%
st_drop_geometry() %>% # eliminar geometría.
group_by(NOM_COMUNA) %>%
summarise(POB_COM = sum(PERS, na.rm = T),
ESC_JH_COM = round(mean(ESC_JH, na.rm= T), 1))| NOM_COMUNA | POB_COM | ESC_JH_COM |
|---|---|---|
| ALGARROBO | 10880 | 12.1 |
| ALHUÉ | 2706 | 9.6 |
| ALTO HOSPICIO | 105065 | 10.4 |
| ANCUD | 28162 | 10.0 |
| ANDACOLLO | 9989 | 8.8 |
| ANGOL | 48608 | 10.1 |
| ANTOFAGASTA | 349983 | 12.2 |
| ANTUCO | 2038 | 9.2 |
| ARAUCO | 27274 | 9.8 |
| ARICA | 203132 | 11.5 |
3.2.4 Joining
En este caso agregaremos a la tabla de resultados comunales antes creada, a la base de la comuna de Viña del Mar y Valparaíso, utilizaremos la función left_join.
zonas <- zonas %>%
left_join(tab_com, by = "NOM_COMUNA") %>% # Ojo con las veces que se hace esta operación
mutate(DIF_EJH_COM = round(( ESC_JH-ESC_JH_COM), 2))ggplot() +
geom_sf(data = zonas, aes(fill = DIF_EJH_COM), color =NA,
alpha=0.8, size= 0.1)+
scale_fill_distiller(palette= "PRGn", direction = 1)+
ggtitle("Diferencias Esc. Jefe Hogar Zona/Comuna - Urbano" ) +
theme_bw() +
theme(panel.grid.major = element_line(colour = "gray80"),
panel.grid.minor = element_line(colour = "gray80"))
3.3 Operaciones Espaciales con sf
Las operaciones espaciales son el conjunto de herramientas que permiten realizar cálculos y transformaciones sobre los datos espaciales vectoriales. Estas operaciones son fundamentales para análisis de proximidad, intersección, disolución de fronteras y creación de buffers, entre otras.
Podemos clasificar las operaciones sobre geometrías en función de lo que toman como entrada y lo que devuelven como salida. En cuanto a la salida tenemos operaciones que devuelven:
- predicates: una lógica que afirma una determinada propiedad es
TRUE - measures: una cantidad (un valor numérico, posiblemente con unidad de medida)
- transformations: nuevas geometrías generadas
y en cuanto a lo que operan, distinguimos las operaciones que son:
- unary cuando trabajan en una única geometría
- binary cuando trabajan con pares de geometrías
- n-ary cuando trabajan con conjuntos de geometrías
3.3.1 Unary measures
Las medidas unarias devuelven una medida o cantidad que describe una propiedad de la geometría:
| medida | devuelve |
|---|---|
dimension |
0 para puntos, 1 para líneas, 2 para polígonos, posiblemente NA para geometrías vacías |
area |
el área de una geometría |
length |
la longitud de una geometría lineal |
Ejemplo cuando calculamos el área de cada polígono de zona censal.
# st_area(zonas)
zonas <- zonas %>%
mutate(AREA = as.numeric(st_area(.))) %>% # en metros cuadrados
mutate(AREA = AREA/10000) %>% # en hectárea cuadrada
mutate(DENS_PERS= round(PERS/AREA, 1))3.3.2 Unary predicates
Los predicados unitarios describen una determinada propiedad de una geometría. Los predicados is_simple, is_valid, y is_empty devolver respectivamente si una geometría es simple, válida o vacía. Dado un sistema de referencia de coordenadas, is_longlat devuelve si las coordenadas son geográficas o proyectadas. es(geometría, clase)` comprueba si una geometría pertenece a una clase determinada.
st_is_valid(zonas) %>% head(10) [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
3.4 Binary Predicates
Una lista de predicados binarios es:
| predicado | significado | inverso de |
|---|---|---|
contains |
Ninguno de los puntos de A está fuera de B | within |
contains_properly |
A contiene a B y B no tiene puntos en común con el límite de A | |
covers |
Ningún punto de B está en el exterior de A | covered_by |
covered_by |
Inverso de covers |
|
crosses |
A y B tienen algunos pero no todos los puntos interiores en común | |
disjoint |
A y B no tienen puntos en común | intersects |
equals |
A y B son topológicamente iguales: el orden de los nodos o el número de nodos puede ser diferente; idéntico a A contiene B y A dentro de B | |
equals_exact |
A y B son geométricamente iguales, y tienen el mismo orden de nodos | |
intersects |
A y B no son disjuntos | disjoint |
is_within_distance |
A está más cerca de B que una distancia dada | |
within |
Ninguno de los puntos de B está fuera de A | contains |
touches |
A y B tienen al menos un punto en el límite en común, pero ningún punto interior | |
overlaps |
A y B tienen algunos puntos en común; la dimensión de estos es idéntica a la de A y B | |
relate |
Dado un patrón de máscara, devuelve si A y B se adhieren a este patrón |
La página DE-9IM de Wikipedia proporciona los patrones relate para cada uno de estos verbos. Es importante importante comprobarlos; por ejemplo, covers y contains (y sus (y sus inversos) no suelen ser del todo intuitivos:
- si A contiene B, B no tiene puntos en común con el exterior o frontera de A
- si A cubre B, B no tiene puntos en común con el exterior de A
3.4.1 Unary transformers
Las transformaciones unarias funcionan por geometría y devuelven para cada geometría una nueva geometría.
| transformador | devuelve una geometría … | |
|---|---|---|
centroid |
de tipo POINT con el centroide de la geometría |
|
buffer |
que es más grande (o más pequeña) que la geometría de entrada, dependiendo del tamaño del buffer | |
jitter |
que ha sido movida en el espacio una cierta cantidad, usando una distribución uniforme bivariada | |
wrap_dateline |
cortada en piezas que ya no cruzan ni cubren la línea de cambio de fecha | |
boundary |
con el límite de la geometría de entrada | |
convex_hull |
que forma el envolvente convexo de la geometría de entrada | |
line_merge |
después de unir elementos LINESTRING conectados de un MULTILINESTRING en LINESTRINGs más largos |
|
make_valid |
que es válida | |
node |
con nodos añadidos a geometrías lineales en las intersecciones sin nodo; solo funciona en geometrías lineales individuales | |
point_on_surface |
con un (arbitrario) punto en una superficie | |
polygonize |
de tipo polígono, creada a partir de líneas que forman un anillo cerrado | |
segmentize |
una geometría (lineal) con nodos a una densidad o distancia mínima dada | |
simplify |
simplificada mediante la eliminación de vértices/nodos (líneas o polígonos) | |
split |
que ha sido dividida con una línea divisoria | |
transform |
transformada o convertida a un nuevo sistema de referencia de coordenadas | |
triangulate |
con polígonos triangulados de Delaunay | |
voronoi |
con la teselación de Voronoi de una geometría de entrada | |
zm |
con coordenadas Z y/o M eliminadas o añadidas |
|
collection_extract |
con sub-geometrías de un GEOMETRYCOLLECTION de un tipo particular |
|
cast |
que se convierte a otro tipo | |
+ |
que se desplaza sobre un vector dado | |
* |
que se multiplica por un escalar o matriz |
Transformación de CRS
Los sistemas de coordenadas forman la base de cálculo para describir la posición de un punto a partir de mediciones geodésicas: distancias, proporciones de distancias (sin escala) y ángulos. Las coordenadas nunca pueden medirse, solamente se calculan con referencia un sistema de coordenadas bien definido.
Para el caso de Chile usamos dos sistemas de referencias de coordenadas:
- Coordenadas elipsoidales (geodésicas):
-
4326 o
"+proj=longlat +datum=WGS84 +no_defs" - Coordenadas proyectadas (métricas):
-
32719 o
"+proj=utm +zone=19 +south +datum=WGS84 +units=m +no_defs"
Las medidas unarias devuelven una medida o cantidad que describe una propiedad de la geometría:
Reproyectar Vectores
zonas_utm <- zonas %>% st_transform(32719)
# st_crs(zonas_utm)
# st_is_empty(zonas_utm) %>% table()Unión de Polígonos
Primeramente se creará una geometría comunal basándose en las zonas censales utilizando la función st_union()
valpo_com <- zonas %>% filter(NOM_COMUNA == "VALPARAÍSO") %>%
st_union()ggplot() +
geom_sf(data = zonas, aes(fill = DIF_EJH_COM), color =NA,
alpha=0.3, size= 0.1)+
scale_fill_distiller(palette= "PRGn", direction = 1)+
geom_sf(data = valpo_com, color ="magenta", alpha=1, size= 1, fill = NA)+
ggtitle("Resaltar la comuna de Valparaíso" ) +
theme_bw() +
theme(panel.grid.major = element_line(colour = "gray80"),
panel.grid.minor = element_line(colour = "gray80"))
Buffer
Aplicación de Buffer con la función de st_buffer, que tiene el parámetro distque dice relación a los metros que se quiere hacer el buffer (también puede ser negativo)
#buffer exterior cuando el valor de dist es positivo
valpo_com_buffer <- valpo_com %>%
st_buffer(dist = 1000) # %>% st_simplify(dTolerance = 100)
#buffer interior cuando el valor de dist es negativo
valpo_com_buffer_menos <- valpo_com %>%
st_buffer(dist = - 500) # %>% st_simplify(dTolerance = 100) ggplot() +
geom_sf(data = valpo_com, color ="magenta", alpha=0.3, size= 1, fill = "magenta")+
geom_sf(data = valpo_com_buffer, color ="orange", alpha=1, size= 1, fill = NA)+
geom_sf(data = valpo_com_buffer_menos, color ="red", alpha=1, size= 1, fill = NA)+
ggtitle("Buffer de la comuna de Valparaíso - 1000 mts." ) +
theme_bw() +
theme(panel.grid.major = element_line(colour = "gray80"),
panel.grid.minor = element_line(colour = "gray80"))
Transformaciones Binarias
Los transformadores binarios son funciones que devuelven una geometría basada en operar sobre un par de geometrías. Incluyen:
| función | devuelve | operador infijo |
|---|---|---|
intersection |
las geometrías superpuestas para un par de geometrías | & |
union |
la combinación de las geometrías; elimina límites internos y puntos, nodos o segmentos de línea duplicados | | |
difference |
las geometrías de la primera después de eliminar la superposición con la segunda geometría | / |
sym_difference |
las combinaciones de las geometrías después de eliminar donde se intersectan; la negación (opuesto) de intersection |
%/% |
3.5 Ejemplo de Delitos
En esta sessión se realizará un flujo de trabajo para el análisis de delitos a nivel comunal utilizando R. Que contempla desde la lectura de la base de información (excel de delitos), agregar información de categorías, hacer filtros, resúmenes estadísticos (tablas dinámicas) y finalmente visualizaciones gráficas y espaciales.
3.5.1 Lectura de una tabla
Se leerá el archivo excel que se vio la semana pasada de delitos comunales.
library(openxlsx) # trabajar con archivos Excel
library(plotly) # gráficos dinámicos
delitos_tbl <- read.xlsx("data/excel/delitos_comunales.xlsx")
# str(delitos_tbl)ver los primeros 6 registros
head(delitos_tbl) REGION NOM_REGION PROVINCIA NOM_PROVIN COMUNA
1 05 REGIÓN DE VALPARAÍSO 056 SAN ANTONIO 05602
2 13 REGIÓN METROPOLITANA DE SANTIAGO 135 MELIPILLA 13502
3 08 REGIÓN DEL BIOBÍO 083 BIOBÍO 08314
4 01 REGIÓN DE TARAPACÁ 011 IQUIQUE 01107
5 03 REGIÓN DE ATACAMA 033 HUASCO 03302
6 10 REGIÓN DE LOS LAGOS 102 CHILOÉ 10202
NOM_COMUNA PERSONAS Tipo.Participante Subgrupo HOMBRE_delitos
1 ALGARROBO 13794 VICTIMA Abigeato 0
2 ALHUÉ 6365 VICTIMA Abigeato 1
3 ALTO BIOBÍO 5823 VICTIMA Abigeato 2
4 ALTO HOSPICIO 106297 VICTIMA Abigeato 0
5 ALTO DEL CARMEN 5280 VICTIMA Abigeato 0
6 ANCUD 38845 VICTIMA Abigeato 9
MUJER_delitos TOTAL_delitos
1 0 0
2 0 1
3 3 5
4 0 0
5 0 0
6 1 10
3.6 Agregar Categoría
Categorizar los Delitos:
Primeros veremos los tipos de delitos que existen, contenidos en la columna Subgrupo:
unique(delitos_tbl$Subgrupo)[1] "Abigeato" "Abusos sexuales"
[3] "Amenazas con armas" "Amenazas o riña"
[5] "Animales sueltos en la vía pública" "Auxilio al suicidio"
- Se muestran los primeros 6 solo para buena visualización en el libro digital, en la práctica deben existir 50 categorias de delitos.
Crear una categoría de delitos
Se debe crear un grupo de delitos de su interés (Puede elegir los que usted quiera). Para este ejemplo se seleccionarán los delitos de violentos.
#guardo los delitos violentos en un vector
d_agrupados <- c( "Lesiones graves o gravísimas", "Lesiones menos graves",
"Microtráfico de sustancias", "Otros homicidios",
"Robo con homicidio", "Robo violento de vehículo motorizado",
"Robos con violencia o intimidación", "Tráfico de sustancias")
# leves o incivilidades
# d_agrupados <- c( "Amenazas con armas", "Amenazas o riña",
# "Desórdenes públicos", "Comercio ilegal" ,
# "Consumo de alcohol y drogas en la vía pública",
# "Daños", "Lesiones leves" , "Desórdenes públicos",
# "Desórdenes públicos", "Ofensas al pudor",
# "Porte de arma cortante o punzante","Receptación",
# "Robo de objetos de o desde vehículo",
# "Robo por sorpresa" )Agregar Categoría de delitos
Para esto crearemos una nueva columna con la función mutate()
delitos_tbl <- delitos_tbl %>%
mutate(grupo = ifelse(Subgrupo %in% d_agrupados, TRUE, FALSE))
# head(delitos_tbl)
count(delitos_tbl, grupo) grupo n
1 FALSE 28980
2 TRUE 5520
dim(delitos_tbl)[1] 34500 13
3.7 Filtros
Filtrar por Tipo de Participante
delitos_filtered <- delitos_tbl %>%
filter(Tipo.Participante == "VICTIMA")Filtrar por Región
# * Pueden cambiar la región
delitos_filtered <- delitos_filtered %>%
filter(NOM_REGION == "REGIÓN DE LA ARAUCANÍA")Filtrar por Categortía
delitos_filtered <- delitos_filtered %>%
filter(grupo == T)3.8 Generar Resúmenes (similar a tablas dinámicas)


tabla_resumen <- delitos_filtered %>%
group_by(NOM_COMUNA) %>%
summarise(total_delitos = sum(TOTAL_delitos),
pob = min(PERSONAS))
tabla_resumen# A tibble: 32 × 3
NOM_COMUNA total_delitos pob
<chr> <dbl> <dbl>
1 ANGOL 147 52958
2 CARAHUE 38 24458
3 CHOLCHOL 33 11581
4 COLLIPULLI 108 24439
5 CUNCO 19 17275
6 CURACAUTÍN 33 17253
7 CURARREHUE 13 7361
8 ERCILLA 53 7704
9 FREIRE 67 24390
10 GALVARINO 31 11914
# ℹ 22 more rows
Ponderar por población
tabla_resumen <- tabla_resumen %>%
mutate(pond_poblacion = total_delitos / pob) %>%
mutate(del_10000_hab = pond_poblacion * 10000) %>%
mutate(del_10000_hab = round(del_10000_hab,2)) # redondear con 2 decimales
head(tabla_resumen)# A tibble: 6 × 5
NOM_COMUNA total_delitos pob pond_poblacion del_10000_hab
<chr> <dbl> <dbl> <dbl> <dbl>
1 ANGOL 147 52958 0.00278 27.8
2 CARAHUE 38 24458 0.00155 15.5
3 CHOLCHOL 33 11581 0.00285 28.5
4 COLLIPULLI 108 24439 0.00442 44.2
5 CUNCO 19 17275 0.00110 11
6 CURACAUTÍN 33 17253 0.00191 19.1
3.9 Visualización gráfica
g_barra <- ggplot(tabla_resumen, aes(x = NOM_COMUNA, y = del_10000_hab)) +
geom_bar(fill = "#6a51a3", color = "gray90", stat = "identity", width = 0.7)+
coord_flip()+
theme_bw()+
labs(title="Delitos Violentos en la Región de la Araucanía",
y ="Delitos Violentos / 10000 hebitantes", x = "Nombre de Comuna")+
theme(plot.title = element_text(face = "bold",colour= "gray20", size=12))
g_barra
Guardar el gráfico de barras como imagen
ggsave(plot = g_barra, filename = "images/del_violentos_R09.png", width = 8, height = 7)Generar gráfico dinámico
ggplotly(g_barra)3.10 Visualización Espacial
Primero se debe unir la tabla resumen delitos con Shapefile de comunas del INE.
Leer Shapefile de comunas
comunas_r09 <- st_read("data/shape/Comunas_Chile.shp") %>%
filter(NOM_REGION == "REGIÓN DE LA ARAUCANÍA")Reading layer `Comunas_Chile' from data source
`/Users/denisberroeta/Documents/Docencia/Goblab/geoanalisis_book/data/shape/Comunas_Chile.shp'
using driver `ESRI Shapefile'
Simple feature collection with 346 features and 9 fields
Geometry type: MULTIPOLYGON
Dimension: XY
Bounding box: xmin: -3701691 ymin: 3734031 xmax: 705926.2 ymax: 8065316
Projected CRS: WGS 84 / UTM zone 19S
head(comunas_r09)Simple feature collection with 6 features and 9 fields
Geometry type: MULTIPOLYGON
Dimension: XY
Bounding box: xmin: 105710.9 ymin: 5678347 xmax: 264088.7 ymax: 5814662
Projected CRS: WGS 84 / UTM zone 19S
OBJECTID REGION NOM_REGION PROVINCIA NOM_PROVIN COMUNA NOM_COMUNA
1 196 09 REGIÓN DE LA ARAUCANÍA 091 CAUTÍN 09102 CARAHUE
2 197 09 REGIÓN DE LA ARAUCANÍA 091 CAUTÍN 09116 SAAVEDRA
3 198 09 REGIÓN DE LA ARAUCANÍA 091 CAUTÍN 09121 CHOLCHOL
4 199 09 REGIÓN DE LA ARAUCANÍA 091 CAUTÍN 09106 GALVARINO
5 200 09 REGIÓN DE LA ARAUCANÍA 092 MALLECO 09211 VICTORIA
6 201 09 REGIÓN DE LA ARAUCANÍA 092 MALLECO 09202 COLLIPULLI
Shape_Leng Shape_Area geometry
1 2.906029 0.13808364 MULTIPOLYGON (((121386.1 57...
2 1.208166 0.04046546 MULTIPOLYGON (((116508.5 57...
3 1.231271 0.04440834 MULTIPOLYGON (((154657.2 57...
4 1.466943 0.05865461 MULTIPOLYGON (((169736.5 57...
5 2.049851 0.12969648 MULTIPOLYGON (((200422.2 57...
6 2.832457 0.13410231 MULTIPOLYGON (((195536.1 58...
Unir shafile con tabla resumen
Se utilizará la función left_join

comunas_r09 <- comunas_r09 %>%
left_join(tabla_resumen, by = "NOM_COMUNA")
head(comunas_r09)Simple feature collection with 6 features and 13 fields
Geometry type: MULTIPOLYGON
Dimension: XY
Bounding box: xmin: 105710.9 ymin: 5678347 xmax: 264088.7 ymax: 5814662
Projected CRS: WGS 84 / UTM zone 19S
OBJECTID REGION NOM_REGION PROVINCIA NOM_PROVIN COMUNA NOM_COMUNA
1 196 09 REGIÓN DE LA ARAUCANÍA 091 CAUTÍN 09102 CARAHUE
2 197 09 REGIÓN DE LA ARAUCANÍA 091 CAUTÍN 09116 SAAVEDRA
3 198 09 REGIÓN DE LA ARAUCANÍA 091 CAUTÍN 09121 CHOLCHOL
4 199 09 REGIÓN DE LA ARAUCANÍA 091 CAUTÍN 09106 GALVARINO
5 200 09 REGIÓN DE LA ARAUCANÍA 092 MALLECO 09211 VICTORIA
6 201 09 REGIÓN DE LA ARAUCANÍA 092 MALLECO 09202 COLLIPULLI
Shape_Leng Shape_Area total_delitos pob pond_poblacion del_10000_hab
1 2.906029 0.13808364 38 24458 0.001553684 15.54
2 1.208166 0.04046546 32 12380 0.002584814 25.85
3 1.231271 0.04440834 33 11581 0.002849495 28.49
4 1.466943 0.05865461 31 11914 0.002601981 26.02
5 2.049851 0.12969648 107 34103 0.003137554 31.38
6 2.832457 0.13410231 108 24439 0.004419166 44.19
geometry
1 MULTIPOLYGON (((121386.1 57...
2 MULTIPOLYGON (((116508.5 57...
3 MULTIPOLYGON (((154657.2 57...
4 MULTIPOLYGON (((169736.5 57...
5 MULTIPOLYGON (((200422.2 57...
6 MULTIPOLYGON (((195536.1 58...
library(viridis)
del_r09_m <- ggplot() +
geom_sf(data = comunas_r09, aes(fill = del_10000_hab), alpha=0.8, size= 0.5)+
scale_fill_viridis_c()+
ggtitle("Delitos Violentos en la Región de la Araucanía" ) +
theme_bw() +
# theme(legend.position="none")+
theme(panel.grid.major = element_line(colour = "gray80"),
panel.grid.minor = element_line(colour = "gray80"))
del_r09_m
Guardar el Mapa como imagen
ggsave(plot = del_r09_m, filename = "images/map_del_violentos_R09.png", width = 8, height = 7)Mapa Dinámico
library(mapview)
mapview(comunas_r09, zcol = "del_10000_hab", alpha.regions = 0.9)3.11 Guardar Resultados
# Excel
write.xlsx(tabla_resumen, file = "data/excel/R09_del_violentos.xlsx")
# Shapefile
st_write(comunas_r09, "data/shape/R09_del_violentos.shp", delete_dsn = T)
# rds
saveRDS(object = comunas_r09,file = "data/rds/R09_del_violentos.rds")